package com.hiwan.system.dao.user;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.hiwan.framework.dao.annotation.MyBatisDao;
import com.hiwan.system.common.base.GenericDao;
import com.hiwan.system.pojo.MenuInfo;
import com.hiwan.system.pojo.OrgInfo;
import com.hiwan.system.pojo.RoleInfo;
import com.hiwan.system.pojo.UserInfo;
import com.hiwan.system.pojo.UserMenu;
import com.hiwan.system.pojo.UserOrgDeptRole;
import com.hiwan.system.pojo.UserRelation;

@MyBatisDao
public interface UserDao extends GenericDao<UserInfo, String> {

	/**
	 * 新增用户
	 * 
	 * @param userInfo
	 * @return
	 */
	public int insertUserInfo(UserInfo userInfo);
	
	
	/**
	 * 修改用户
	 * 
	 * @param userInfo
	 * @return
	 */
	public int updateUserInfo(UserInfo userInfo);

	/**
	 * 删除用户
	 * 
	 * @param userId
	 * @return
	 */
	public int deleteUserInfo(String userId);

	public int deleteUserRelation(String relationId);

	public int updatePwd(UserInfo userInfo);

	/**
	 * 插入用户关系表
	 * 
	 * @param userRelation
	 * @return
	 */
	public int insertUserRelation(UserRelation userRelation);

	/**
	 * 修改用户关系表
	 * 
	 * @param userRelation
	 * @return
	 */
	public int updateUserRelation(UserRelation userRelation);
	/**
	 * 修改用户默认角色
	 * @return
	 */
	public int updateUserDefaultRole(UserInfo userInfo);
	/**
	 * 修改当前为首选
	 * 
	 * @param userRelation
	 * @return
	 */
	public int updateOneReOrder(UserRelation userRelation);

	/**
	 * 当一个设为首选时，其他设置为非首选
	 * 
	 * @param userRelation
	 * @return
	 */
	public int updateReOrderOthers(UserRelation userRelation);

	/**
	 * 查找所有userId和userNamem
	 * 
	 * @return
	 */
	public List<UserInfo> selectAllUsers();

	/**
	 * 按身份证类型和省份证号码查询用户信息
	 * 
	 * @param userInfo
	 * @return
	 */
	public UserInfo selectUserInfoByCard(UserInfo userInfo);

	/**
	 * 根据用户编号查询用户信息
	 * 
	 * @param userId
	 * @return
	 */
	/*public UserInfo selectUserInfo(String userId) {
		UserInfo user = selectUserInfo(userId, null);
		if(user == null){
			user = selectUserInfoByName(userId);
		}
		return user;
	}*/
	
	
	public UserInfo selectUser(UserInfo userInfo);
	
	/**
	 * 根据用户编号或别名查询用户信息
	 * 
	 * @param userId
	 * @return
	 */
	/*public UserInfo selectUserInfoByName(String name) {
		return selectUserInfo(null, name);
	}*/

	/*public UserInfo selectUserInfo(@Param("userId") String userId,@Param("name") String name) {
		Map<String,String> map = new HashMap<String,String>();
		map.put("userId", userId);
		map.put("name", name);
		return selectOne("selectUserInfo", map);
	}*/

	/**
	 * 根据用户关系序列号查询用户关系信息
	 * 
	 * @param relationId
	 * @return
	 */
	public List<UserInfo> selectByUserId(UserInfo info);

	
	/**
	 * 根据用户关系序列号查询用户关系信息
	 * 
	 * @param relationId
	 * @return
	 */
	public UserRelation selectByRelationId(String relationId);
	/**
	 * 根据用户编号查询用户归属关系
	 * 
	 * @param userId
	 * @return
	 */
	public List<UserRelation> selectUserRelations(@Param("userId") String userId);
	

	/***
	 * 根据用户编号查询用户归属关系
	 * @param userId
	 * @param status 用户任职状态
	 * @return
	 */
	public List<UserRelation> selectUserRelations(@Param("userId") String userId, String status);

	/**
	 * 按查询条件查询用户列表
	 * 
	 * @param uodr
	 * @return
	 */
	/*public List<UserOrgDeptRole> selectUserListPage(UserOrgDeptRole uodr) {
		return selectListPage("selectUserPage", uodr);
	}*/
	
	public List<UserInfo> selectUserList(UserInfo info);
	
	public List<UserInfo> selectListPage(UserInfo info);

	/**
	 * 按用户编号，机构号，部门号查找关系表
	 * 
	 * @param ur
	 * @return
	 */
	public UserRelation selectRelationBy3Id(UserRelation ur);

	/**
	 * 根据部门查询该部门下所有用户列表
	 * 
	 * @return
	 */
	public List<UserRelation> selectUserListByDept(@Param("orgId") String orgId, @Param("deptId") String deptId);

	/**
	 * 根据角色机构查询该部门下所有用户列表
	 * @param orgId
	 * @param roleIdstr
	 * @return
	 */
	public List<UserRelation> selectUserListByRole(@Param("orgId") String orgId,@Param("roleIdstr") String roleIdstr);
	
	/**
	 * 查找自定义菜单表
	 */
	public List<UserMenu> selectUserMenu(String relation);

	/**
	 * 插入自定义菜单表
	 */
	public int insertUserMenu(UserMenu userMenu);

	/**
	 * 修改自定义菜单表
	 */
	public int updateUserMenu(UserMenu userMenu);

	/**
	 * 删除自定义菜单表
	 */
	public int deleteUserMenu(String relationId);
	
	/**
	 * 按查询条件查询用户列表（不分页）
	 * 
	 * @param uodr
	 * @return
	 */
	/*public List<UserOrgDeptRole> selectUserListNoPage(UserOrgDeptRole uodr) {
		return selectList("selectUserList", uodr);
	}*/
	
	public List<UserOrgDeptRole> selectUserListNoPage(UserOrgDeptRole uodr);

	/**
	 * 根据relationId和menuId删除自定义菜单表
	 * 
	 * @param userMenu
	 * @return
	 */
	public int deleteUserMenuBy2Id(UserMenu userMenu);

	/**
	 * 查询一个人所拥有的全部菜单
	 */
	public List<MenuInfo> selectAllMenu(String relationId);
	
	/**
	 * 获得某机构下最大的useId，用来新增用户用（当userId要自动生成的时候）
	 * @param userStr
	 * @return
	 */
	public String selectMaxUserId(String userStr);
	
	
	
	
	
	
	/**
	 *  Map<String,String> map=new HashMap<String,String>();
	 * 		map.put("userId",userId);
	 * 		map.put("roleId",roleId);
	 * @date 2016年1月15日 上午10:30:37
	 * @author 李仕波
	 */
	public int insertUserRoleList(Map<String,String> map);
	/**
	 * 删除hw_user_role表中用户所有的角色id
	 * @date 2016年1月15日 上午11:20:57
	 * @author 李仕波
	 */
	public int deleteUserRoles(String userId);
	
	/**查询用户的角色**/
	public List<RoleInfo> selectUserRoles(UserInfo info);
	public List<UserInfo> selectUserMany(UserInfo info);
	public List<UserInfo> getUserInfoList();
	
	/**查询登录用户所在机构和下属机构的用户**/
	public List<UserInfo> selectUserByOrgIdList(UserInfo info);
	
	public int insertUserFromXXY(UserInfo info);
	public int updateUserFromXXY(UserInfo info);
	
	public int updateUserRoleFromXXY(UserInfo info);
	
	public int deleteUserOneRoleFromXXY(UserInfo info);
	
	public int insertUserRoleFromXXY(UserInfo info);
	
	public UserInfo getUserRole(UserInfo info);
	
	public OrgInfo getUserOrgInfo(UserInfo userInfo);
	public List<UserInfo> getUserInfos(UserInfo userInfo);
}
